class IntervalManager {
	constructor(fetchDataCallback) {
		if (typeof fetchDataCallback !== 'function') {
			throw new Error('fetchDataCallback must be a function');
		}

		this.fetchDataCallback = fetchDataCallback; // 用户传入的数据获取方法
		this.intervalId = null; // 定时器 ID
		this.currentInterval = 1500; // 当前间隔时间，默认 5 秒
		this.noDataCount = 0; // 记录连续无数据的次数
		this.maxNoDataCount = 5; // 连续无数据的最大次数
		this.shortInterval = 1500; // 短间隔时间（5 秒）
		this.longInterval = 60000; // 长间隔时间（60 秒）
	}

	start() {
		// 启动定时器
		this.intervalId = setInterval(() => this.executeTask(), this.currentInterval);
	}

	stop() {
		// 停止定时器
		if (this.intervalId) {
			clearInterval(this.intervalId);
			this.intervalId = null;
		}
	}

	async executeTask() {
		// 调用用户传入的数据获取方法
		const hasData = await this.fetchDataCallback();
		// console.log('hasData', hasData)
		if (hasData) {
			// 如果有数据，重置计数器并确保间隔为 5 秒
			this.noDataCount = 0;
			if (this.currentInterval !== this.shortInterval) {
				this.updateInterval(this.shortInterval);
			}
		} else {
			// 如果没有数据，增加计数器
			this.noDataCount++;
			if (this.noDataCount >= this.maxNoDataCount) {
				// 如果连续 5 次无数据，切换到 60 秒间隔
				this.updateInterval(this.longInterval);
			}
		}
	}

	updateInterval(newInterval) {
		// 更新间隔时间
		if (this.currentInterval !== newInterval) {
			this.currentInterval = newInterval;
			this.stop(); // 停止当前定时器
			this.start(); // 重新启动定时器
		}
	}
}

module.exports = IntervalManager
